package com.cnap.service;

import com.cnap.model.schedule.engine.*;

/**
 * 算法引擎服务类
 *
 * @author xc
 **/
public interface AlgorithmEngineService {

    /**
     * 计算部署策略
     *
     * @param deployPolicyReq 请求
     * @return 结果
     */
    CommentResultForEngine<DeployPolicyCalcRes> calculateDeployPolicy(DeployPolicyRequest deployPolicyReq);

    /**
     * 计算部署策略2.0
     *
     * @param deployPolicyReqV2 请求
     * @return 结果
     */
    CommentResultForEngine<DeployPolicyCalcResV2> calculateDeployPolicyV2(DeployPolicyRequestV2 deployPolicyReqV2);

    /**
     * 验证
     *
     * @param deployPolicyValidateReq 请求
     * @return 结果
     */
    CommentResultForEngine<ValidateResponse> validate(DeployPolicyValidateReq deployPolicyValidateReq);

    /**
     * 部署下发
     *
     * @param deployPolicyDistributeReq 请求
     * @return 结果
     */
    CommentResultForEngine<ValidateResponse> distribute(DeployPolicyDistributeReq deployPolicyDistributeReq);

    /**
     * 部署下发2.0
     *
     * @param deployPolicyDistributeReq 请求
     * @return 结果
     */
    CommentResultForEngine<ValidateResponse> distributeV2(DeployPolicyDistributeReqV2 deployPolicyDistributeReq);

    /**
     * 操作
     *
     * @param operateReq 请求
     * @return 结果
     */
    CommentResultForEngine<Void> operate(OperateReq operateReq);
}
